#!/bin/bash

# C4pad.fun 项目开发环境启动脚本

set -e

echo "🚀 启动 C4pad.fun 开发环境..."

# 检查必要的工具
check_command() {
    if ! command -v $1 &> /dev/null; then
        echo "❌ $1 未安装，请先安装 $1"
        exit 1
    fi
}

echo "📋 检查必要工具..."
check_command "node"
check_command "npm"
check_command "solana"
check_command "anchor"
check_command "docker"

# # 启动数据库服务
# echo "🗄️ 启动数据库服务..."
# docker compose up -d postgres redis

# # 等待数据库启动
# echo "⏳ 等待数据库启动..."
# sleep 5

# 安装后端依赖并生成 Prisma 客户端
echo "🔧 设置后端服务..."
cd backend
if [ ! -d "node_modules" ]; then
    pnpm install --no-strict-peer-dependencies
fi
npx prisma generate

# 重置数据库以确保干净的状态（仅在首次运行时）
if [ ! -f ".migration_done" ]; then
    echo "🔄 初始化数据库..."
    npx prisma migrate reset --force --skip-seed
    touch .migration_done
else
    echo "📋 数据库已初始化，跳过迁移"
fi

echo "✅ 后端设置完成"

# 安装前端依赖（如果还没有安装）
echo "📦 安装前端依赖..."
cd ../frontend
if [ ! -d "node_modules" ]; then
    pnpm install
fi
echo "✅ 前端依赖安装完成"

# 跳过智能合约构建（需要先修复 Rust 代码）
echo "⚠️ 跳过智能合约构建（请手动修复）"
cd ..

echo ""
echo "🎉 开发环境准备完成！"
echo ""
echo "正在启动服务..."

# 启动后端服务
echo "🚀 启动 NestJS 后端服务..."
cd backend
PORT=7172 npm run start:dev &
BACKEND_PID=$!
echo "✅ 后端服务已启动 (PID: $BACKEND_PID)"

# 等待后端启动
sleep 3

# 启动前端服务
echo "🌐 启动 Next.js 前端服务..."
cd ../frontend
PORT=7171 npm run dev &
FRONTEND_PID=$!
echo "✅ 前端服务已启动 (PID: $FRONTEND_PID)"

# 保存 PID 到文件供停止脚本使用
cd ..
echo "$BACKEND_PID $FRONTEND_PID" > .dev_pids

echo ""
echo "🎊 所有服务已启动！"
echo ""
echo "下一步操作："
echo "1. 启动本地验证节点: solana-test-validator"
echo "2. 修复并构建智能合约: cd smart-contracts/c4pad-contracts && anchor build"
echo ""
echo "访问地址："
echo "- 前端应用: http://localhost:7171"
echo "- 后端 API: http://localhost:7172"
echo "- API 文档: http://localhost:7172/api/docs"
echo "- 健康检查: http://localhost:7172/api/health"
echo "- PostgreSQL: localhost:5432"
echo "- Redis: localhost:6379"
echo ""
echo "要停止所有服务，请运行:"
echo "kill $BACKEND_PID $FRONTEND_PID"
echo ""
echo "或者使用 Ctrl+C 停止此脚本（推荐）"

# 添加信号处理，确保脚本被终止时也终止后台进程
cleanup() {
    echo ""
    echo "🛑 正在停止服务..."
    kill $BACKEND_PID 2>/dev/null || true
    kill $FRONTEND_PID 2>/dev/null || true
    echo "✅ 所有服务已停止"
    exit 0
}

trap cleanup SIGINT SIGTERM

# 等待用户手动停止
echo "按 Ctrl+C 停止所有服务..."
wait
